package com.shujia.day17.tcp;

public class Demo05Lambda2 {
    public static void main(String[] args) {
        /*
            TODO lambda 表达式 简写
               ① 当方法体{}中有且仅有一行代码时，那么不需要添加 {}
               ② 当参数列表()中有参数时，对于参数的类型可以去除，可以根据接口中的方法推断出来
                        一般也是不用给定类型
               ③ 当参数列表中有且仅有一个变量时，() 可以省略
               ④ 有多个参数时,()不可以省略
               ⑤ 当{}有返回值，并且代码只有一行时，return和{}需要同时省略

         */

        Lambda1 lambda1 = () -> System.out.println("对应的函数没有方法和返回值");
        lambda1.fun();

        Lambda2 lambda2 = a -> System.out.println(a * a);
        lambda2.fun(4);

        Lambda3 lambda3 = (a, b) ->  a * b;
        System.out.println(lambda3.fun(3, 4));

        Lambda3 lambda4 = (a, b) ->  {
            System.out.println(a * b);
            return a * b;
        };
        System.out.println(lambda4.fun(3, 4));

    }

    // 有一个参数，无返回值
    static interface Lambda1{
        void fun();
//        void fun1();
    }

    // 有一个参数，无返回值
    static interface Lambda2{
        void fun(int a);
    }

    // 有多个参数，并且有返回值
    static interface Lambda3{
        int fun(int a,int b);
    }
}
